The concept of computing and control systems, which have both hardware and software components, is known in the art. A computing and control system is used to provide coordinated control of equipment, devices, and computer processes. It also provides data processing capabilities on data collected by such equipment, devices, and computer processes inside the system. A computing and control system is considered to be distributed if multiple devices exist in the system and some coordination occurs between these devices. The devices are generally located separately and communicate with each other through a communication network. A computing and control system is heterogeneous if multiple devices exist in the system and at least one of the devices has a different hardware configuration, software configuration, operating system, programming method, development tool, and such, from at least one of the other devices.
An example distributed heterogeneous computing and control system is an Internet of Things (IoT) system, in which there are generally at least one server computer and a plurality of edge devices. The at least one server computer generally has powerful hardware resources, while each of the edge devices generally have constrained hardware resources. The edge devices can also differ from each other in hardware resources, software configuration, operating system, programming method, etc.
Designing applications for such a distributed heterogeneous computing and control system is difficult due to the distributed and heterogeneous nature of the system. Traditional programming methods are ordinarily not well suited for distributed heterogeneous systems because they produce application programs intended to run on a single device. That is, traditional programming methods do not support producing application programs that run on multiple devices that have different hardware configurations, software configurations, operating systems, etc.
For example, a development team may need to implement an application for the following distributed heterogeneous system. A first edge device of the system has a temperature sensor, which is attached to the body of an industrial machine, and the first edge device reads the temperature from the sensor periodically. If the temperature goes above a threshold, the first edge device sends an alert message to a server computer. A second edge device communicates with the industrial machine through a serial port and can read from or write to the industrial machine's internal registers. The second edge device reads the industrial machine's internal status registers periodically. If a status becomes abnormal, the second edge device sends an alert message to the server computer. A third edge device is attached to a video camera, which can take a photo or video of the area surrounding the industrial machine. If the server computer receives an alert message from either the first edge device or the second edge device, the server computer requests the third edge device to take a photo. The server computer sends both the alert message and the photo to a client device. An operator checks the alert message and the photo on the client device, and if the operator determines that the situation is an emergency, the operator sends a command to the second edge device to shut down the industrial machine.
To implement the above example in a traditional application, at least five separate application programs need to be implemented: one program for the first edge device; one program for the second edge device, one program for the third edge device, and two programs for the server computer. The first program for the server computer may process data coming from the first, second, and third edge devices, and the second program for the server computer may be a web application for the client device. Implementing this example application on the different devices using traditional programming methods is a complex and incoherent process.
For example, when application programs executing on different devices of a distributed heterogeneous system communicate with each other, the application programs need to be very careful with data format compatibility. In the above example, the temperature in the program of the first edge device may be expressed as a floating-point number, and typically needs to be converted to characters (char) to be sent through a communication interface. The application program executing on the server computer that receives the temperature then must convert the characters back into a floating-point number. This conversion process is very error-prone when multiple distributed application programs are involved. Further, the different devices may use different network interfaces, such as ethernet, WiFi, cellular, Zigbee, etc. Therefore, each device may need to install one or more network device drivers and use one or more communication data formats. The application programs that execute on the different devices may also need to implement different application programs and convert transmitted data between different communication data formats depending on the network interfaces.
The application programs executed on different devices may also be implemented in different programming languages. In the above example, the first edge device may execute an application program implemented in Python, the second edge device may execute an application program implemented in Lua, the third edge device may execute an application program implemented in C++, and the server computer may execute an application program implemented in Javascript. The different programming languages optimize different performance parameters, which makes implementation using these different programming languages very complex. Further, the different application programs executed on the different devices are updated remotely. For example, the application programs are generally developed in one or more computers accessible by a development team, and the developed programs are then pushed, either in original format or in compiled format, to respective devices. The more application programs that exist among the different devices, the more complex the update process.
Due to these challenges, implementing application programs for distributed heterogeneous systems is a complex, tedious, and error-prone process. Generally multiple development tools, multiple development processes, and multiple developers with different skill sets are required to implement these application program, which makes implementing distributed heterogeneous systems an expensive and time-consuming process.